home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Pascal Super Library
/
Pascal Super Library (CW International)(1997).bin
/
TURB_VIS
/
TCYBER25
/
CYBASE.ZIP
/
PXEDIT.PAS
< prev
Wrap
Pascal/Delphi Source File
|
1994-10-20
|
54KB
|
492 lines
{
Turbo Vision CyberTools 2.5
(C) 1994 Steve Goldsmith
All Rights Reserved
* * * I M P O R T A N T * * *
Remember to add TCursor.getTableHandle method to the Data Base Framework in
\BP\PXENGINE\PASCAL\SOURCE\OOPXENG.PAS. This allows PX Edit access to
TCursor's private table handle tabH. PX Edit can then search on the primary
index regardless of what index the table is opened on.
Search OOPXENG.PAS for 'searchIndex'. Right after:
function searchIndex(keyRec: PRecord; mode: PXSearchMode;
fldCnt: Integer): Retcode; virtual;
ADD:
function getTableHandle : TableHandle;
Search OOPXENG.PAS for 'TRecord methods'. Right before:
*************************************************************************
TRecord methods
**************************************************************************
ADD:
function TCursor.getTableHandle : TableHandle;
begin
getTableHandle := tabH
end;
}
UNIT PXEDIT ;{$I APP.INC} {$X+} INTERFACE USES {$IFDEF DPMI} WINPROCS , {$ENDIF} DOS , PXENGINE , OOPXENG , DRIVERS ,
OBJECTS , VIEWS , VALIDATE , DIALOGS , MSGBOX , EDITORS , APP , MEMORY , COMMDLGS , TVSTR ;CONST PXEPRIMARY =100 ;
PXECOMPOSITE =101 ;PXEMAXRECBUFS =43 ;PXERECBUFDIFF =5 ;PXELINEOFS =3 ;PXEMAXUMEMOSIZE =65520 ;PXEFIXEDMAX =1E13 ;
PXESHARENAME ='SHARE.TST';TYPE PPXEFIELDDESC =^TPXEFIELDDESC ;TPXEFIELDDESC =OBJECT (TOBJECT)FDISPLEN :INTEGER ;
FDESC :PFIELDDESC ;END ;PPXEFIELD =^TPXEFIELD ;TPXEFIELD =OBJECT (TOBJECT)DISPSTR :PSTRING ;END ;
PPXERECORD =^TPXERECORD ;TPXERECORD =OBJECT (TOBJECT)RECNUM :RECORDNUMBER ;FLDCOLL :PCOLLECTION ;END ;
TPXEENGINECFGREC =RECORD ENGTYP , DOSSHR , WINSHR , CRTFMT , LCKMOD , SRTORD :INTEGER ;SWPSIZ , TABHAN , RECHAN ,
LCKHAN , FILHAN :STRING [ 6 ] ;NETPAT :PATHSTR ;USRNAM :STRING [ MAXNAMELEN ] ;CLINAM :STRING [ MAXNAMELEN ] ;END ;
PPXEENGINECFG =^TPXEENGINECFG ;TPXEENGINECFG =OBJECT (TDIALOG)CONSTRUCTOR INIT ;END ;PPXEMEMOREC =^TPXEMEMOREC ;
TPXEMEMOREC =RECORD LEN :WORD ;DATA :ARRAY [ 0 .. PXEMAXUMEMOSIZE - 1 ] OF CHAR ;END ;PPXEMEMOEDIT =^TPXEMEMOEDIT ;
TPXEMEMOEDIT =OBJECT (TDIALOG)MEMO :PMEMO ;CONSTRUCTOR INIT ;PROCEDURE HANDLEEVENT (VAR EVENT :TEVENT );VIRTUAL;END ;
TPXELISTBOXREC =RECORD LIST :PCOLLECTION ;SELECTION :WORD ;END ;PPXEFIELDLISTBOX =^TPXEFIELDLISTBOX ;
TPXEFIELDLISTBOX =OBJECT (TLISTBOX)FUNCTION GETTEXT (ITEM :INTEGER ;MAXLEN :INTEGER ):STRING ;VIRTUAL;
PROCEDURE HANDLEEVENT (VAR EVENT :TEVENT );VIRTUAL;END ;TPXECREATEDLGREC =RECORD NAME :STRING [ 25 ] ;LEN :STRING [ 3 ] ;
TYP :INTEGER ;FIELDS :TPXELISTBOXREC ;END ;PPXECREATEDIALOG =^TPXECREATEDIALOG ;
TPXECREATEDIALOG =OBJECT (TDIALOG)TABLENAM :PATHSTR ;FIELDPTR :PCOLLECTION ;TYPEBUTTONS :PMSGBUTTONS ;NAMELINE ,
LENGTHLINE :PINPUTLINE ;FIELDBOX :PPXEFIELDLISTBOX ;CONSTRUCTOR INIT (TBLNAME :PATHSTR ;FLDCOLL :PCOLLECTION );
PROCEDURE SETDATA (VAR REC );VIRTUAL;PROCEDURE ADDFIELD ;PROCEDURE DELETEFIELD ;PROCEDURE DEFTYPELEN ;
PROCEDURE HANDLEEVENT (VAR EVENT :TEVENT );VIRTUAL;END ;TPXEINDEXDLGREC =RECORD FIELDS :TPXELISTBOXREC ;
KEY :TPXELISTBOXREC ;INDEX , CASESENS :INTEGER ;FLDNAME :STRING [ 25 ] ;END ;PPXEINDEXDIALOG =^TPXEINDEXDIALOG ;
TPXEINDEXDIALOG =OBJECT (TDIALOG)FIELDPTR , KEYPTR :PCOLLECTION ;NAMELINE :PINPUTLINE ;FIELDBOX ,
KEYBOX :PPXEFIELDLISTBOX ;CONSTRUCTOR INIT (TBLNAME :PATHSTR );PROCEDURE HANDLEEVENT (VAR EVENT :TEVENT );VIRTUAL;END ;
TPXEKEYDLGREC =RECORD FIELDS :TPXELISTBOXREC ;END ;PPXEKEYDIALOG =^TPXEKEYDIALOG ;
TPXEKEYDIALOG =OBJECT (TDIALOG)FIELDPTR :PCOLLECTION ;FIELDBOX :PPXEFIELDLISTBOX ;CONSTRUCTOR INIT (TBLNAME :PATHSTR );
PROCEDURE HANDLEEVENT (VAR EVENT :TEVENT );VIRTUAL;END ;PPXETABLELINE =^TPXETABLELINE ;
TPXETABLELINE =OBJECT (TINPUTLINE)FIELDSTR :STRING ;PROCEDURE SETSTATE (ASTATE :WORD ;ENABLE :BOOLEAN );VIRTUAL;END ;
PPXETABLEVIEW =^TPXETABLEVIEW ;TPXETABLEVIEW =OBJECT (TVIEW)FIELDCNT , PRIFIELDCNT , RECBUFS :INTEGER ;
TABLENAM :PATHSTR ;INDEXNUMBER :FIELDNUMBER ;EDITLOCKHAN :LOCKHANDLE ;EDITLOCKRECNUM :RECORDNUMBER ;
TABLEHAN :TABLEHANDLE ;ENGINEPTR :PENGINE ;DATABASEPTR :PDATABASE ;CURSORPTR :PCURSOR ;FIELDDESCCOLL ,
RECORDCOLL :PCOLLECTION ;HSCROLLBAR :PSCROLLBAR ;TABLELINE :PPXETABLELINE ;CONSTRUCTOR INIT (VAR BOUNDS :TRECT ;
AHSCROLLBAR :PSCROLLBAR ;TBLNAME :PATHSTR ;ENGPTR :PENGINE ;DBPTR :PDATABASE ;CURPTR :PCURSOR ;IDXNUM :FIELDNUMBER );
DESTRUCTOR DONE ;VIRTUAL;PROCEDURE SETLINEVAILDATOR (FTYP :PXFIELDTYPE );VIRTUAL;PROCEDURE DRAWLINE ;VIRTUAL;
PROCEDURE DRAW ;VIRTUAL;FUNCTION ERRORBOX (ERRCODE :INTEGER ):BOOLEAN ;VIRTUAL;PROCEDURE NEWFIELDCOLL ;VIRTUAL;
PROCEDURE NEWRECCOLL ;VIRTUAL;PROCEDURE XLATEFIELD (RECDATA :PPXERECORD ;PFLD :PPXEFIELDDESC );VIRTUAL;
PROCEDURE READFIELDS ;VIRTUAL;FUNCTION SEARCHKEY (RECDATA :PPXERECORD ;SMODE :INTEGER ):RETCODE ;VIRTUAL;
FUNCTION SEARCHSECKEY (RECDATA :PPXERECORD ;SMODE :INTEGER ):RETCODE ;VIRTUAL;PROCEDURE REFRESH ;VIRTUAL;
FUNCTION GOTOHOME :RETCODE ;VIRTUAL;FUNCTION GOTOLAST :RETCODE ;VIRTUAL;FUNCTION DOWNREAD :RETCODE ;VIRTUAL;
FUNCTION UPREAD :RETCODE ;VIRTUAL;FUNCTION PAGEDOWNREAD :RETCODE ;VIRTUAL;FUNCTION PAGEUPREAD :RETCODE ;VIRTUAL;
FUNCTION HOMEREAD :RETCODE ;VIRTUAL;FUNCTION ENDREAD :RETCODE ;VIRTUAL;FUNCTION LOCKREC (RECDATA :PPXERECORD ):RETCODE ;
VIRTUAL;FUNCTION UNLOCKREC :RETCODE ;VIRTUAL;FUNCTION LOCKUPDATE :RETCODE ;VIRTUAL;FUNCTION WRITEFIELD :RETCODE ;
VIRTUAL;FUNCTION BLOBMEMOEDIT :RETCODE ;VIRTUAL;FUNCTION BLOBEDIT :RETCODE ;VIRTUAL;FUNCTION DELETEREC :RETCODE ;
VIRTUAL;PROCEDURE HANDLEEVENT (VAR EVENT :TEVENT );VIRTUAL;FUNCTION VALID (COMMAND :WORD ):BOOLEAN ;VIRTUAL;END ;
PPXETABLEWIN =^TPXETABLEWIN ;TPXETABLEWIN =OBJECT (TDIALOG)TABLEVIEW :PPXETABLEVIEW ;CONSTRUCTOR INIT (TBLNAME :PATHSTR ;
ENGPTR :PENGINE ;DBPTR :PDATABASE ;CURPTR :PCURSOR ;IDXNUM :FIELDNUMBER );PROCEDURE SIZELIMITS (VAR MIN ,MAX:TPOINT );
VIRTUAL;PROCEDURE SETSTATE (ASTATE :WORD ;ENABLE :BOOLEAN );VIRTUAL;PROCEDURE HANDLEEVENT (VAR EVENT :TEVENT );VIRTUAL;
FUNCTION VALID (COMMAND :WORD ):BOOLEAN ;VIRTUAL;END ;CONST PXEBLOBNAMES :ARRAY [ 0 .. 4 ] OF STRING [ 17 ]
=('<BLOB Memo>', '<BLOB Binary>', '<BLOB Fmt Memo>', '<BLOB OLE Object>', '<BLOB Graphic>');CMFIELDADD =65300 ;
CMFIELDDELETE =65301 ;CMFIELDEDIT =65302 ;CMFIELDENTER =65303 ;CMFIELDEXIT =65304 ;CMVIDEOCHANGE =65305 ;PXEEDITCMDS =[
CMCOPY , CMPASTE ] ;FUNCTION SHAREINSTALLED :BOOLEAN ;FUNCTION GETFIELDDESC (FILENAME :PATHSTR ;DATAB :PDATABASE ;
VAR FLDCOLL :PCOLLECTION ):RETCODE ;FUNCTION GETKEYFILES (TBLNAME :PATHSTR ):PSTRINGCOLLECTION ;FUNCTION GETKEYFIELDDESC
(FILENAME :PATHSTR ;DATAB :PDATABASE ;VAR FLDCOLL :PCOLLECTION ):RETCODE ;PROCEDURE ENGCFGTODLGCFG (ENGCFG :TENV ;
VAR DLGCFG :TPXEENGINECFGREC );PROCEDURE DLGCFGTOENGCFG (DLGCFG :TPXEENGINECFGREC ;VAR ENGCFG :TENV );
IMPLEMENTATION FUNCTION SHAREINSTALLED :BOOLEAN ;VAR OIl0:FILE OF WORD;O1Ol110OOOOO:WORD;OI0l0I10Oll1:BYTE;
BEGIN OI0l0I10Oll1 := 1 ;ASSIGN (OIl0 , PXESHARENAME );{$I-}REWRITE (OIl0 );{$I+}IF IORESULT =0 THEN BEGIN {$I-}WRITE
(OIl0 , O1Ol110OOOOO );{$I+}IF IORESULT =0 THEN BEGIN ASM {} MOV BX , FILEREC( OIl0) . HANDLE{} MOV CX , 0000h {}
MOV DX , 0000h {} MOV SI , 0000h {} MOV DI , 0001h {} MOV AL , 00h {} MOV AH , 5ch {} {$IFDEF DPMI} {} CALL DOS3CALL{}
{$ELSE} {} INT 21h {} {$ENDIF} {} JC @lockerror {} DEC OI0l0I10Oll1{} @lockerror : {} END;SHAREINSTALLED := (OI0l0I10Oll1
<> 1 );{$I-}CLOSE (OIl0 );{$I+}IF IORESULT =0 THEN {$I-}ERASE (OIl0 ){$I+}END END END ;FUNCTION GETFIELDDESC
(FILENAME:PATHSTR;DATAB:PDATABASE;VAR FLDCOLL:PCOLLECTION):RETCODE ;VAR OIlO,OIOIllO0I1I:INTEGER;
O10OO1000O0OI:PFIELDDESC;OOIOOOlO11Il:PCURSOR;BEGIN OOIOOOlO11Il := NEW (PCURSOR , INITANDOPEN (DATAB , FILENAME , 0 ,
TRUE ));IF OOIOOOlO11Il ^. LASTERROR =PXSUCCESS THEN BEGIN OIOIllO0I1I := OOIOOOlO11Il ^. GENERICREC ^. GETFIELDCOUNT ;
FLDCOLL := NEW (PCOLLECTION , INIT (OIOIllO0I1I , 0 ));FOR OIlO := 1 TO OIOIllO0I1I DO BEGIN O10OO1000O0OI := NEW
(PFIELDDESC , INIT );OOIOOOlO11Il ^. GENERICREC ^. GETFIELDDESC (OIlO , O10OO1000O0OI );FLDCOLL ^. INSERT (O10OO1000O0OI
)END END ;GETFIELDDESC := OOIOOOlO11Il ^. LASTERROR ;DISPOSE (OOIOOOlO11Il , DONE )END ;FUNCTION GETKEYFILES
(TBLNAME:PATHSTR):PSTRINGCOLLECTION ;VAR OOIIO0OO1l1O:SEARCHREC;O1OO0000l0O1:PSTRINGCOLLECTION;BEGIN O1OO0000l0O1 := NEW
(PSTRINGCOLLECTION , INIT (10 , 10 ));FINDFIRST (ADDEXTSTR (TBLNAME , 'PX'), ANYFILE , OOIIO0OO1l1O );IF DOSERROR =0 THEN
BEGIN O1OO0000l0O1 ^. INSERT (NEWSTR (OOIIO0OO1l1O.NAME ));FINDFIRST (ADDEXTSTR (TBLNAME , 'X??'), ANYFILE , OOIIO0OO1l1O
);WHILE DOSERROR =0 DO BEGIN O1OO0000l0O1 ^. INSERT (NEWSTR (OOIIO0OO1l1O.NAME ));FINDNEXT (OOIIO0OO1l1O )END END ;IF
O1OO0000l0O1 ^. COUNT =0 THEN BEGIN DISPOSE (O1OO0000l0O1 , DONE );O1OO0000l0O1 := NIL END ;GETKEYFILES := O1OO0000l0O1
END ;FUNCTION GETKEYFIELDDESC (FILENAME:PATHSTR;DATAB:PDATABASE;VAR FLDCOLL:PCOLLECTION):RETCODE ;
VAR OOO0lI0l0l01:INTEGER;OIOO:DIRSTR;OO0O:NAMESTR;OIOl:EXTSTR;OOlOO0l1l0Ol:PATHSTR;O1OO1I0IlOll:PSTRINGCOLLECTION;
O101O1IOOOO00:FIELDHANDLEARRAY;O10OO1000O0OI:PFIELDDESC;OOIOOOlO11Il:PCURSOR;PROCEDURE OOII11011l1l
(OI1000l1II00:POINTER);FAR ;BEGIN O10OO1000O0OI := NEW (PFIELDDESC , INIT );PXKEYQUERY (PSTRING (OI1000l1II00 )^,
O10OO1000O0OI ^. FLDNAME , O10OO1000O0OI ^. FLDLEN , OOO0lI0l0l01 , O101O1IOOOO00 , O10OO1000O0OI ^. FLDNUM );IF
O10OO1000O0OI ^. FLDNUM =0 THEN BEGIN O10OO1000O0OI ^. FLDNAME := 'Primary';BYTE (O10OO1000O0OI ^. FLDTYPE ):= PXEPRIMARY
;O10OO1000O0OI ^. FLDLEN := DATAB ^. GETNUMPFIELDS (OO0O )END ELSE IF O10OO1000O0OI ^. FLDNUM < 256 THEN OOIOOOlO11Il ^.
GENERICREC ^. GETFIELDDESC (O10OO1000O0OI ^. FLDNUM , O10OO1000O0OI )ELSE BYTE (O10OO1000O0OI ^. FLDTYPE ):= PXECOMPOSITE
;FLDCOLL ^. INSERT (O10OO1000O0OI )END ;BEGIN FLDCOLL := NIL ;FSPLIT (FILENAME , OIOO , OO0O , OIOl );IF OIOO [ BYTE
(OIOO [ 0 ] )] ='\'THEN DEC (BYTE (OIOO [ 0 ] ));GETDIR (0 , OOlOO0l1l0Ol );{$I-}CHDIR (OIOO );{$I+}IF IORESULT =0 THEN
BEGIN OOIOOOlO11Il := NEW (PCURSOR , INITANDOPEN (DATAB , OO0O , 0 , TRUE ));IF OOIOOOlO11Il ^. LASTERROR =PXSUCCESS THEN
BEGIN O1OO1I0IlOll := GETKEYFILES (OO0O );IF O1OO1I0IlOll <> NIL THEN BEGIN FLDCOLL := NEW (PCOLLECTION , INIT
(O1OO1I0IlOll ^. COUNT , 0 ));O1OO1I0IlOll ^. FOREACH (@ OOII11011l1l );DISPOSE (O1OO1I0IlOll , DONE );IF FLDCOLL ^.
COUNT =0 THEN BEGIN DISPOSE (FLDCOLL , DONE );FLDCOLL := NIL END END END ;GETKEYFIELDDESC := OOIOOOlO11Il ^. LASTERROR ;
DISPOSE (OOIOOOlO11Il , DONE );{$I-}CHDIR (OOlOO0l1l0Ol );{$I+}IF IORESULT <> 0 THEN GETKEYFIELDDESC := PXERR_DIRNOACCESS END
ELSE GETKEYFIELDDESC:=PXERR_DIRNOACCESS END;PROCEDURE ENGCFGTODLGCFG (ENGCFG :TENV ; VAR DLGCFG :TPXEENGINECFGREC );
BEGIN WITH ENGCFG DO BEGIN WITH DLGCFG DO BEGIN ENGTYP := INTEGER (ENGINETYPE );DOSSHR := INTEGER (DOSSHARE
);WINSHR := INTEGER (WINSHARE );CRTFMT := INTEGER (TABCRTMODE );LCKMOD := INTEGER (TABLCKMODE );SRTORD := INTEGER
(SORTORDER );SWPSIZ := INTTOSTR (BUFSIZE );TABHAN := INTTOSTR (MAXTABLES );RECHAN := INTTOSTR (MAXRECBUFS );LCKHAN :=
INTTOSTR (MAXLOCKS );FILHAN := INTTOSTR (MAXFILES );NETPAT := NETNAMEPATH ;USRNAM := USERNAME ;CLINAM := CLIENTNAME ;
END ;END ;END ;PROCEDURE DLGCFGTOENGCFG (DLGCFG :TPXEENGINECFGREC ;VAR ENGCFG :TENV );
BEGIN WITH DLGCFG DO BEGIN WITH ENGCFG DO BEGIN ENGINETYPE := TENGINETYPE (ENGTYP );DOSSHARE := PXDOSSHARE
(DOSSHR );WINSHARE := PXWINSHARE (WINSHR );TABCRTMODE := PXTABCRTMODE (CRTFMT );TABLCKMODE := PXTBLLCKMODE (LCKMOD );
SORTORDER := PXSORTORDER (SRTORD );BUFSIZE := STRTOINT (SWPSIZ );MAXTABLES := STRTOINT (TABHAN );MAXRECBUFS := STRTOINT
(RECHAN );MAXLOCKS := STRTOINT (LCKHAN );MAXFILES := STRTOINT (FILHAN );NETNAMEPATH := NETPAT ;USERNAME := USRNAM ;
CLIENTNAME := CLINAM ;END ;END ;END; CONSTRUCTOR TPXEENGINECFG.INIT ;VAR OO1I:TRECT;
O10I0l0O:PRADIOBUTTONS;OIO1000lI0l:PINPUTLINE;BEGIN OO1I.ASSIGN (0 , 0 , 53 , 20 );INHERITED INIT(OO1I ,
'Engine Options');OPTIONS := OPTIONS OR OFCENTERED ;OO1I.ASSIGN (2 , 3 , 15 , 6 );O10I0l0O := NEW (PRADIOBUTTONS , INIT
(OO1I , NEWSITEM ('Local', NEWSITEM ('Network', NEWSITEM ('Windows', NIL )))));INSERT (O10I0l0O );OO1I.ASSIGN (1 , 2 , 13
, 3 );INSERT (NEW (PLABEL , INIT (OO1I , '~E~ngine type', O10I0l0O )));OO1I.ASSIGN (17 , 3 , 30 , 6 );O10I0l0O := NEW
(PRADIOBUTTONS , INIT (OO1I , NEWSITEM ('Local', NEWSITEM ('Network', NEWSITEM ('None', NIL )))));INSERT (O10I0l0O );
OO1I.ASSIGN (16 , 2 , 30 , 3 );INSERT (NEW (PLABEL , INIT (OO1I , '~D~OS share', O10I0l0O )));OO1I.ASSIGN (32 , 3 , 51 ,
6 );O10I0l0O := NEW (PRADIOBUTTONS , INIT (OO1I , NEWSITEM ('Shared', NEWSITEM ('Single client', NEWSITEM ('Exclusive',
NIL )))));INSERT (O10I0l0O );OO1I.ASSIGN (31 , 2 , 47 , 3 );INSERT (NEW (PLABEL , INIT (OO1I , '~W~indows share',
O10I0l0O )));OO1I.ASSIGN (2 , 8 , 15 , 10 );O10I0l0O := NEW (PRADIOBUTTONS , INIT (OO1I , NEWSITEM ('4.0', NEWSITEM
('3.5', NIL ))));INSERT (O10I0l0O );OO1I.ASSIGN (1 , 7 , 15 , 8 );INSERT (NEW (PLABEL , INIT (OO1I , '~C~reate format',
O10I0l0O )));OO1I.ASSIGN (17 , 8 , 30 , 10 );O10I0l0O := NEW (PRADIOBUTTONS , INIT (OO1I , NEWSITEM ('4.0', NEWSITEM
('3.5', NIL ))));INSERT (O10I0l0O );OO1I.ASSIGN (16 , 7 , 30 , 8 );INSERT (NEW (PLABEL , INIT (OO1I , '~L~ock mode',
O10I0l0O )));OO1I.ASSIGN (32 , 8 , 51 , 13 );O10I0l0O := NEW (PRADIOBUTTONS , INIT (OO1I , NEWSITEM ('ASCII', NEWSITEM
('International', NEWSITEM ('Norwegian 3.5', NEWSITEM ('Norwegian 4.0', NEWSITEM ('Swedish', NIL )))))));INSERT (O10I0l0O
);OO1I.ASSIGN (31 , 7 , 51 , 8 );INSERT (NEW (PLABEL , INIT (OO1I , '~S~ort order', O10I0l0O )));OO1I.ASSIGN (13 , 11 ,
21 , 12 );OIO1000lI0l := NEW (PINPUTLINE , INIT (OO1I , 6 ));OIO1000lI0l ^. SETVALIDATOR (NEW (PRANGEVALIDATOR , INIT (8
, 256 )));INSERT (OIO1000lI0l );OO1I.ASSIGN (1 , 11 , 12 , 12 );INSERT (NEW (PLABEL , INIT (OO1I , 'Swap si~z~e',
OIO1000lI0l )));OO1I.ASSIGN (13 , 12 , 21 , 13 );OIO1000lI0l := NEW (PINPUTLINE , INIT (OO1I , 6 ));OIO1000lI0l ^.
SETVALIDATOR (NEW (PRANGEVALIDATOR , INIT (1 , 64 )));INSERT (OIO1000lI0l );OO1I.ASSIGN (1 , 12 , 12 , 13 );INSERT (NEW
(PLABEL , INIT (OO1I , '~T~ables', OIO1000lI0l )));OO1I.ASSIGN (13 , 13 , 21 , 14 );OIO1000lI0l := NEW (PINPUTLINE , INIT
(OO1I , 6 ));OIO1000lI0l ^. SETVALIDATOR (NEW (PRANGEVALIDATOR , INIT (1 , 512 )));INSERT (OIO1000lI0l );OO1I.ASSIGN (1 ,
13 , 12 , 14 );INSERT (NEW (PLABEL , INIT (OO1I , '~R~ecords', OIO1000lI0l )));OO1I.ASSIGN (13 , 14 , 21 , 15 );
OIO1000lI0l := NEW (PINPUTLINE , INIT (OO1I , 6 ));OIO1000lI0l ^. SETVALIDATOR (NEW (PRANGEVALIDATOR , INIT (1 , 128 )));
INSERT (OIO1000lI0l );OO1I.ASSIGN (1 , 14 , 12 , 15 );INSERT (NEW (PLABEL , INIT (OO1I , 'L~o~cks', OIO1000lI0l )));
OO1I.ASSIGN (13 , 15 , 21 , 16 );OIO1000lI0l := NEW (PINPUTLINE , INIT (OO1I , 6 ));OIO1000lI0l ^. SETVALIDATOR (NEW
(PRANGEVALIDATOR , INIT (3 , 255 )));INSERT (OIO1000lI0l );OO1I.ASSIGN (1 , 15 , 12 , 16 );INSERT (NEW (PLABEL , INIT
(OO1I , '~F~iles', OIO1000lI0l )));OO1I.ASSIGN (32 , 14 , 51 , 15 );OIO1000lI0l := NEW (PINPUTLINE , INIT (OO1I , SIZEOF
(PATHSTR )- 1 ));INSERT (OIO1000lI0l );OO1I.ASSIGN (22 , 14 , 31 , 15 );INSERT (NEW (PLABEL , INIT (OO1I , 'Net ~p~ath',
OIO1000lI0l )));OO1I.ASSIGN (32 , 15 , 51 , 16 );OIO1000lI0l := NEW (PINPUTLINE , INIT (OO1I , MAXNAMELEN ));INSERT
(OIO1000lI0l );OO1I.ASSIGN (22 , 15 , 31 , 16 );INSERT (NEW (PLABEL , INIT (OO1I , '~N~ame', OIO1000lI0l )));OO1I.ASSIGN
(32 , 16 , 51 , 17 );OIO1000lI0l := NEW (PINPUTLINE , INIT (OO1I , MAXNAMELEN ));INSERT (OIO1000lI0l );OO1I.ASSIGN (22 ,
16 , 31 , 17 );INSERT (NEW (PLABEL , INIT (OO1I , 'Cl~i~ent', OIO1000lI0l )));OO1I.ASSIGN (1 , 17 , 11 , 19 );INSERT (NEW
(PBUTTON , INIT (OO1I , 'O~K~', CMOK , BFDEFAULT )));OO1I.ASSIGN (12 , 17 , 22 , 19 );INSERT (NEW (PBUTTON , INIT (OO1I ,
'Cancel', CMCANCEL , BFNORMAL )))END ;CONSTRUCTOR TPXEMEMOEDIT.INIT ;VAR OO1I:TRECT;
OOIOI1II000O,OOIOI1II00l1:PSCROLLBAR;BEGIN DESKTOP ^. GETEXTENT (OO1I );INHERITED INIT(OO1I , 'BLOB Memo Editor');
OPTIONS := OPTIONS OR OFVALIDATE OR OFTILEABLE ;FLAGS := WFMOVE + WFGROW + WFCLOSE + WFZOOM ;GROWMODE := GFGROWREL ;
PALETTE := DPBLUEDIALOG ;OOIOI1II000O := STANDARDSCROLLBAR (SBHORIZONTAL OR SBHANDLEKEYBOARD );INSERT (OOIOI1II000O );
OOIOI1II00l1 := STANDARDSCROLLBAR (SBVERTICAL OR SBHANDLEKEYBOARD );INSERT (OOIOI1II00l1 );GETEXTENT (OO1I );OO1I.GROW (-
1 , - 1 );MEMO := NEW (PMEMO , INIT (OO1I , OOIOI1II000O , OOIOI1II00l1 , NIL , PXEMAXUMEMOSIZE ));INSERT (MEMO )END ;
PROCEDURE TPXEMEMOEDIT.HANDLEEVENT (VAR EVENT:TEVENT);BEGIN IF (EVENT.WHAT =EVCOMMAND )AND (EVENT.COMMAND =CMCANCEL )THEN
EVENT.COMMAND := CMOK ;INHERITED HANDLEEVENT(EVENT )END ;FUNCTION TPXEFIELDLISTBOX.GETTEXT (ITEM:INTEGER;
MAXLEN:INTEGER):STRING ;VAR OIOI:CHAR;OO10:PFIELDDESC;BEGIN IF LIST <> NIL THEN BEGIN OO10 := PFIELDDESC (LIST ^. AT
(ITEM ));CASE BYTE (OO10 ^. FLDTYPE ) OF BYTE (FLDCHAR ):OIOI := 'A';BYTE (FLDSHORT ):OIOI := 'S';BYTE (FLDDOUBLE ):IF
OO10 ^. FLDSUBTYPE =FLDSTNONE THEN OIOI := 'N'ELSE OIOI := '$';BYTE (FLDDATE ):OIOI := 'D';BYTE (FLDBLOB ):CASE OO10 ^.
FLDSUBTYPE OF FLDSTMEMO :OIOI := 'M';FLDSTBINARY :OIOI := 'B';FLDSTFMTMEMO :OIOI := 'F';FLDSTOLEOBJ :OIOI := 'O';
FLDSTGRAPHIC :OIOI := 'G'END ;PXEPRIMARY :OIOI := 'P';PXECOMPOSITE :OIOI := 'C'END ;GETTEXT := INTTORIGHTSTR (OO10 ^.
FLDNUM , 3 )+ ' │ '+ OIOI + ' │ '+ INTTORIGHTSTR (OO10 ^. FLDLEN , 3 )+ ' │ '+ OO10 ^. FLDNAME END ELSE GETTEXT := ''END
;PROCEDURE TPXEFIELDLISTBOX.HANDLEEVENT (VAR EVENT:TEVENT);BEGIN INHERITED HANDLEEVENT(EVENT );IF (EVENT.WHAT =EVKEYDOWN
)AND (EVENT.KEYCODE =KBENTER )AND (LIST ^. COUNT > 0 )THEN BEGIN EVENT.WHAT := EVBROADCAST ;EVENT.COMMAND :=
CMLISTITEMSELECTED ;PUTEVENT (EVENT );CLEAREVENT (EVENT )END END ;CONSTRUCTOR TPXECREATEDIALOG.INIT (TBLNAME:PATHSTR;
FLDCOLL:PCOLLECTION);VAR OO1I:TRECT;OOIOI1II00l1:PSCROLLBAR;BEGIN OO1I.ASSIGN (0 , 0 , 66 , 17 );INHERITED INIT(OO1I ,
TBLNAME );OPTIONS := OPTIONS OR OFCENTERED ;TABLENAM := TBLNAME ;FIELDPTR := FLDCOLL ;OO1I.ASSIGN (2 , 3 , 29 , 4 );
NAMELINE := NEW (PINPUTLINE , INIT (OO1I , 25 ));INSERT (NAMELINE );OO1I.ASSIGN (1 , 2 , 6 , 3 );INSERT (NEW (PLABEL ,
INIT (OO1I , '~N~ame', NAMELINE )));OO1I.ASSIGN (41 , 3 , 46 , 4 );LENGTHLINE := NEW (PINPUTLINE , INIT (OO1I , 3 ));
LENGTHLINE ^. SETVALIDATOR (NEW (PRANGEVALIDATOR , INIT (0 , 255 )));INSERT (LENGTHLINE );OO1I.ASSIGN (40 , 2 , 46 , 3 );
INSERT (NEW (PLABEL , INIT (OO1I , '~L~en', LENGTHLINE )));OO1I.ASSIGN (47 , 3 , 64 , 13 );TYPEBUTTONS := NEW
(PMSGBUTTONS , INIT (OO1I , NEWSITEM ('Alhpa', NEWSITEM ('Short', NEWSITEM ('Double', NEWSITEM ('Date', NEWSITEM
('Currency', NEWSITEM ('Memo', NEWSITEM ('Binary', NEWSITEM ('Fmt Memo', NEWSITEM ('Windows OLE', NEWSITEM ('Graphic',
NIL ))))))))))));INSERT (TYPEBUTTONS );OO1I.ASSIGN (46 , 2 , 51 , 3 );INSERT (NEW (PLABEL , INIT (OO1I , '~T~ype',
TYPEBUTTONS )));OO1I.ASSIGN (45 , 5 , 46 , 13 );NEW (OOIOI1II00l1 , INIT (OO1I ));INSERT (OOIOI1II00l1 );OO1I.ASSIGN (2 ,
5 , 45 , 13 );FIELDBOX := NEW (PPXEFIELDLISTBOX , INIT (OO1I , 1 , OOIOI1II00l1 ));INSERT (FIELDBOX );OO1I.ASSIGN (1 , 4
, 22 , 5 );INSERT (NEW (PLABEL , INIT (OO1I , '~F~ield Typ Len Name', FIELDBOX )));OO1I.ASSIGN (2 , 14 , 12 , 16 );
INSERT (NEW (PBUTTON , INIT (OO1I , 'O~K~', CMOK , BFDEFAULT )));OO1I.ASSIGN (15 , 14 , 25 , 16 );INSERT (NEW (PBUTTON ,
INIT (OO1I , '~A~dd', CMFIELDADD , BFNORMAL )));OO1I.ASSIGN (28 , 14 , 38 , 16 );INSERT (NEW (PBUTTON , INIT (OO1I ,
'~D~elete', CMFIELDDELETE , BFNORMAL )));OO1I.ASSIGN (41 , 14 , 51 , 16 );INSERT (NEW (PBUTTON , INIT (OO1I , '~E~dit',
CMFIELDEDIT , BFNORMAL )));OO1I.ASSIGN (54 , 14 , 64 , 16 );INSERT (NEW (PBUTTON , INIT (OO1I , 'Cancel', CMCANCEL ,
BFNORMAL )));SELECTNEXT (FALSE )END ;PROCEDURE TPXECREATEDIALOG.SETDATA (VAR REC);BEGIN INHERITED SETDATA(REC );
DEFTYPELEN END ;PROCEDURE TPXECREATEDIALOG.ADDFIELD ;VAR O101I1l1OO010,O1lll1llI0:INTEGER;OO10:PFIELDDESC;FUNCTION O10l
(OI1000l1II00:POINTER):BOOLEAN ;FAR ;BEGIN O10l := (UPCASESTR (PFIELDDESC (OI1000l1II00 )^. FLDNAME )=UPCASESTR (NAMELINE
^. DATA ^))END ;PROCEDURE OI0lI00100O1 (OI1000l1II00:POINTER);FAR ;BEGIN PFIELDDESC (OI1000l1II00 )^. FLDNUM :=
O1lll1llI0 ;INC (O1lll1llI0 )END ;BEGIN IF FIELDBOX ^. RANGE < 255 THEN BEGIN IF NAMELINE ^. DATA ^<> ''THEN BEGIN IF
FIELDPTR ^. FIRSTTHAT (@ O10l )=NIL THEN BEGIN IF LENGTHLINE ^. VALID (CMOK )THEN BEGIN O101I1l1OO010 := TYPEBUTTONS ^.
VALUE ;OO10 := NEW (PFIELDDESC , INIT );WITH OO10^ DO BEGIN FLDNAME := NAMELINE ^. DATA ^;CASE O101I1l1OO010 OF 0 .. 1
:BEGIN FLDTYPE := PXFIELDTYPE (O101I1l1OO010 );FLDSUBTYPE := FLDSTNONE END ;2 .. 3 :BEGIN FLDTYPE := PXFIELDTYPE
(O101I1l1OO010 + 1 );FLDSUBTYPE := FLDSTNONE END ;4 :BEGIN FLDTYPE := FLDDOUBLE ;FLDSUBTYPE := FLDSTMONEY END ;5 .. 9
:BEGIN FLDTYPE := FLDBLOB ;FLDSUBTYPE := PXFIELDSUBTYPE (O101I1l1OO010 - 3 )END ;END ;FLDLEN := STRTOINT (LENGTHLINE ^.
DATA ^)END ;IF FIELDBOX ^. FOCUSED =FIELDBOX ^. RANGE - 1 THEN FIELDPTR ^. INSERT (OO10 )ELSE FIELDPTR ^. ATINSERT
(FIELDBOX ^. FOCUSED , OO10 );O1lll1llI0 := 1 ;FIELDPTR ^. FOREACH (@ OI0lI00100O1 );FIELDBOX ^. SETRANGE (FIELDBOX ^.
LIST ^. COUNT );IF FIELDBOX ^. FOCUSED < FIELDBOX ^. RANGE - 1 THEN FIELDBOX ^. FOCUSITEM (FIELDBOX ^. FOCUSED + 1 )ELSE
FIELDBOX ^. DRAWVIEW END END ELSE BEGIN MESSAGEBOX (#3'Duplicate field name', NIL , MFERROR OR MFOKBUTTON );NAMELINE ^.
FOCUS END END ELSE BEGIN MESSAGEBOX (#3'Name field blank', NIL , MFERROR OR MFOKBUTTON );NAMELINE ^. FOCUS END END ELSE
MESSAGEBOX (#3'Only 255 fields allowed', NIL , MFERROR OR MFOKBUTTON )END ;PROCEDURE TPXECREATEDIALOG.DELETEFIELD ;
VAR O1lll1llI0:INTEGER;PROCEDURE OI0lI00100O1 (OI1000l1II00:POINTER);FAR ;BEGIN PFIELDDESC (OI1000l1II00 )^. FLDNUM :=
O1lll1llI0 ;INC (O1lll1llI0 )END ;BEGIN IF FIELDBOX ^. RANGE > 0 THEN BEGIN FIELDPTR ^. ATDELETE (FIELDBOX ^. FOCUSED );
FIELDBOX ^. SETRANGE (FIELDBOX ^. LIST ^. COUNT );O1lll1llI0 := 1 ;FIELDPTR ^. FOREACH (@ OI0lI00100O1 );FIELDBOX ^.
DRAWVIEW END END ;PROCEDURE TPXECREATEDIALOG.DEFTYPELEN ;VAR OOlOO00O101O,OI1I0l1llIl:LONGINT;BEGIN CASE TYPEBUTTONS ^.
VALUE OF 0 :BEGIN OOlOO00O101O := 1 ;OI1I0l1llIl := 255 END ;1 .. 4 :BEGIN OOlOO00O101O := 0 ;OI1I0l1llIl := 0 END ;5
:BEGIN OOlOO00O101O := 1 ;OI1I0l1llIl := 240 END ;6 .. 9 :BEGIN OOlOO00O101O := 0 ;OI1I0l1llIl := 240 END END ;
PRANGEVALIDATOR (LENGTHLINE ^. VALIDATOR )^. MIN := OOlOO00O101O ;PRANGEVALIDATOR (LENGTHLINE ^. VALIDATOR )^. MAX :=
OI1I0l1llIl END ;PROCEDURE TPXECREATEDIALOG.HANDLEEVENT (VAR EVENT:TEVENT);PROCEDURE OOIllO1OOIO0 ;
VAR O101I1l1OO010:INTEGER;Ol00II0I1I10:STRING [ 3 ] ;O101O0I1lIl0l:PFIELDDESC;BEGIN IF FIELDBOX ^. RANGE > 0 THEN
BEGIN O101O0I1lIl0l := FIELDPTR ^. AT (FIELDBOX ^. FOCUSED );NAMELINE ^. SETDATA (O101O0I1lIl0l ^. FLDNAME );
Ol00II0I1I10 := INTTOSTR (O101O0I1lIl0l ^. FLDLEN );LENGTHLINE ^. SETDATA (Ol00II0I1I10 );CASE O101O0I1lIl0l ^. FLDTYPE
OF FLDCHAR :O101I1l1OO010 := 0 ;FLDSHORT :O101I1l1OO010 := 1 ;FLDDOUBLE :IF O101O0I1lIl0l ^. FLDSUBTYPE =FLDSTMONEY THEN
O101I1l1OO010 := 4 ELSE O101I1l1OO010 := 2 ;FLDDATE :O101I1l1OO010 := 3 ;FLDBLOB :O101I1l1OO010 := INTEGER (O101O0I1lIl0l
^. FLDSUBTYPE )+ 3 END ;TYPEBUTTONS ^. SETDATA (O101I1l1OO010 );DEFTYPELEN END END ;BEGIN INHERITED HANDLEEVENT(EVENT );
CASE EVENT.WHAT OF EVCOMMAND :BEGIN CASE EVENT.COMMAND OF CMFIELDADD :ADDFIELD ;CMFIELDDELETE :DELETEFIELD ;
CMFIELDEDIT :OOIllO1OOIO0 ELSE EXIT END ;CLEAREVENT (EVENT )END ;EVBROADCAST :BEGIN CASE EVENT.COMMAND
OF CMMSGBUTTONPRESS :DEFTYPELEN END END END END ;CONSTRUCTOR TPXEINDEXDIALOG.INIT (TBLNAME:PATHSTR);VAR OO1I:TRECT;
OOIOI1II00l1:PSCROLLBAR;O1l0lIO0OII0,O1IIOOI0lI:PRADIOBUTTONS;BEGIN OO1I.ASSIGN (0 , 0 , 48 , 19 );INHERITED INIT(OO1I ,
TBLNAME );OPTIONS := OPTIONS OR OFCENTERED ;OO1I.ASSIGN (45 , 3 , 46 , 7 );NEW (OOIOI1II00l1 , INIT (OO1I ));INSERT
(OOIOI1II00l1 );OO1I.ASSIGN (2 , 3 , 45 , 7 );FIELDBOX := NEW (PPXEFIELDLISTBOX , INIT (OO1I , 1 , OOIOI1II00l1 ));
INSERT (FIELDBOX );OO1I.ASSIGN (1 , 2 , 22 , 3 );INSERT (NEW (PLABEL , INIT (OO1I , '~F~ield Typ Len Name', FIELDBOX
)));OO1I.ASSIGN (45 , 8 , 46 , 12 );NEW (OOIOI1II00l1 , INIT (OO1I ));INSERT (OOIOI1II00l1 );OO1I.ASSIGN (2 , 8 , 45 , 12
);KEYBOX := NEW (PPXEFIELDLISTBOX , INIT (OO1I , 1 , OOIOI1II00l1 ));INSERT (KEYBOX );OO1I.ASSIGN (1 , 7 , 22 , 8 );
INSERT (NEW (PLABEL , INIT (OO1I , '~S~econdary key fields', KEYBOX )));OO1I.ASSIGN (2 , 13 , 19 , 17 );O1l0lIO0OII0 :=
NEW (PRADIOBUTTONS , INIT (OO1I , NEWSITEM ('Primary', NEWSITEM ('Secondary', NEWSITEM ('Incremental', NIL )))));INSERT
(O1l0lIO0OII0 );OO1I.ASSIGN (1 , 12 , 6 , 13 );INSERT (NEW (PLABEL , INIT (OO1I , '~T~ype', O1l0lIO0OII0 )));OO1I.ASSIGN
(20 , 13 , 35 , 15 );O1IIOOI0lI := NEW (PRADIOBUTTONS , INIT (OO1I , NEWSITEM ('On', NEWSITEM ('Off', NIL ))));INSERT
(O1IIOOI0lI );OO1I.ASSIGN (19 , 12 , 34 , 13 );INSERT (NEW (PLABEL , INIT (OO1I , '~C~ase sensitive', O1IIOOI0lI )));
OO1I.ASSIGN (20 , 16 , 35 , 17 );NAMELINE := NEW (PINPUTLINE , INIT (OO1I , 25 ));INSERT (NAMELINE );OO1I.ASSIGN (19 , 15
, 34 , 16 );INSERT (NEW (PLABEL , INIT (OO1I , '~N~ame', NAMELINE )));OO1I.ASSIGN (36 , 13 , 46 , 15 );INSERT (NEW
(PBUTTON , INIT (OO1I , 'O~K~', CMOK , BFDEFAULT )));OO1I.ASSIGN (36 , 16 , 46 , 18 );INSERT (NEW (PBUTTON , INIT (OO1I ,
'Cancel', CMCANCEL , BFNORMAL )));SELECTNEXT (FALSE )END ;PROCEDURE TPXEINDEXDIALOG.HANDLEEVENT (VAR EVENT:TEVENT);
VAR O10OO1000O0OI:PFIELDDESC;BEGIN INHERITED HANDLEEVENT(EVENT );IF EVENT.WHAT =EVBROADCAST THEN IF EVENT.COMMAND
=CMLISTITEMSELECTED THEN BEGIN IF FIELDBOX ^. STATE AND SFSELECTED <> 0 THEN BEGIN O10OO1000O0OI := NEW (PFIELDDESC ,
INIT );O10OO1000O0OI ^:= PFIELDDESC (FIELDBOX ^. LIST ^. AT (FIELDBOX ^. FOCUSED ))^;FIELDBOX ^. LIST ^. FREE (FIELDBOX
^. LIST ^. AT (FIELDBOX ^. FOCUSED ));KEYBOX ^. LIST ^. INSERT (O10OO1000O0OI );FIELDBOX ^. SETRANGE (FIELDBOX ^. LIST ^.
COUNT );FIELDBOX ^. DRAWVIEW ;KEYBOX ^. SETRANGE (KEYBOX ^. LIST ^. COUNT );KEYBOX ^. DRAWVIEW END ELSE
BEGIN O10OO1000O0OI := NEW (PFIELDDESC , INIT );O10OO1000O0OI ^:= PFIELDDESC (KEYBOX ^. LIST ^. AT (KEYBOX ^. FOCUSED
))^;KEYBOX ^. LIST ^. FREE (KEYBOX ^. LIST ^. AT (KEYBOX ^. FOCUSED ));FIELDBOX ^. LIST ^. INSERT (O10OO1000O0OI );
KEYBOX ^. SETRANGE (KEYBOX ^. LIST ^. COUNT );KEYBOX ^. DRAWVIEW ;FIELDBOX ^. SETRANGE (FIELDBOX ^. LIST ^. COUNT );
FIELDBOX ^. DRAWVIEW END END END ;CONSTRUCTOR TPXEKEYDIALOG.INIT (TBLNAME:PATHSTR);VAR OO1I:TRECT;
OOIOI1II00l1:PSCROLLBAR;BEGIN OO1I.ASSIGN (0 , 0 , 48 , 12 );INHERITED INIT(OO1I , TBLNAME );OPTIONS := OPTIONS OR
OFCENTERED ;OO1I.ASSIGN (45 , 3 , 46 , 7 );NEW (OOIOI1II00l1 , INIT (OO1I ));INSERT (OOIOI1II00l1 );OO1I.ASSIGN (2 , 3 ,
45 , 7 );FIELDBOX := NEW (PPXEFIELDLISTBOX , INIT (OO1I , 1 , OOIOI1II00l1 ));INSERT (FIELDBOX );OO1I.ASSIGN (1 , 2 , 22
, 3 );INSERT (NEW (PLABEL , INIT (OO1I , '~F~ield Typ Len Name', FIELDBOX )));OO1I.ASSIGN (25 , 8 , 35 , 10 );INSERT
(NEW (PBUTTON , INIT (OO1I , 'O~K~', CMOK , BFDEFAULT )));OO1I.ASSIGN (36 , 8 , 46 , 10 );INSERT (NEW (PBUTTON , INIT
(OO1I , 'Cancel', CMCANCEL , BFNORMAL )));SELECTNEXT (FALSE )END ;PROCEDURE TPXEKEYDIALOG.HANDLEEVENT (VAR EVENT:TEVENT);
VAR O10OO1000O0OI:PFIELDDESC;BEGIN INHERITED HANDLEEVENT(EVENT );IF (EVENT.WHAT =EVBROADCAST )AND (EVENT.COMMAND
=CMLISTITEMSELECTED )THEN BEGIN EVENT.WHAT := EVCOMMAND ;EVENT.COMMAND := CMOK ;PUTEVENT (EVENT );CLEAREVENT (EVENT )END
END ;PROCEDURE TPXETABLELINE.SETSTATE (ASTATE:WORD;ENABLE:BOOLEAN);BEGIN INHERITED SETSTATE(ASTATE , ENABLE );IF (ASTATE
=SFSELECTED )AND (STATE AND SFACTIVE <> 0 )THEN BEGIN IF STATE AND SFSELECTED =0 THEN MESSAGE (OWNER , EVBROADCAST ,
CMFIELDEXIT , @ SELF )ELSE MESSAGE (OWNER , EVBROADCAST , CMFIELDENTER , @ SELF )END END ;CONSTRUCTOR TPXETABLEVIEW.INIT
(VAR BOUNDS:TRECT;AHSCROLLBAR:PSCROLLBAR;TBLNAME:PATHSTR;ENGPTR:PENGINE;DBPTR:PDATABASE;CURPTR:PCURSOR;
IDXNUM:FIELDNUMBER);BEGIN INHERITED INIT(BOUNDS );OPTIONS := OPTIONS OR OFSELECTABLE OR OFVALIDATE ;EVENTMASK :=
EVENTMASK OR EVBROADCAST ;GROWMODE := GFGROWHIX + GFGROWHIY ;HSCROLLBAR := AHSCROLLBAR ;TABLENAM := TBLNAME ;ENGINEPTR :=
ENGPTR ;DATABASEPTR := DBPTR ;CURSORPTR := CURPTR ;INDEXNUMBER := IDXNUM ;EDITLOCKHAN := 0 ;EDITLOCKRECNUM := 0 ;
TABLEHAN := CURSORPTR ^. GETTABLEHANDLE ;FIELDCNT := CURSORPTR ^. GENERICREC ^. GETFIELDCOUNT ;PRIFIELDCNT := DATABASEPTR
^. GETNUMPFIELDS (TABLENAM );RECBUFS := DESKTOP ^. SIZE.Y - PXERECBUFDIFF ;NEWFIELDCOLL ;NEWRECCOLL ;GOTOHOME ;
HSCROLLBAR ^. SETPARAMS (0 , 0 , FIELDCNT - 1 , 1 , 1 )END ;DESTRUCTOR TPXETABLEVIEW.DONE ;PROCEDURE OOlll0l0I0lO
(OI1000l1II00:POINTER);FAR ;PROCEDURE Ol01IOI1I0lO (OI1000l1II00:POINTER);FAR ;BEGIN DISPOSESTR (PPXEFIELD (OI1000l1II00
)^. DISPSTR )END ;BEGIN PPXERECORD (OI1000l1II00 )^. FLDCOLL ^. FOREACH (@ Ol01IOI1I0lO );DISPOSE (PPXERECORD
(OI1000l1II00 )^. FLDCOLL , DONE )END ;PROCEDURE O1OlIl1IIOl0 (OI1000l1II00:POINTER);FAR ;BEGIN DISPOSE (PPXEFIELDDESC
(OI1000l1II00 )^. FDESC , DONE )END ;BEGIN TABLELINE ^. MAXLEN := 255 ;IF FIELDDESCCOLL <> NIL THEN BEGIN FIELDDESCCOLL
^. FOREACH (@ O1OlIl1IIOl0 );DISPOSE (FIELDDESCCOLL , DONE )END ;IF RECORDCOLL <> NIL THEN BEGIN RECORDCOLL ^. FOREACH (@
OOlll0l0I0lO );DISPOSE (RECORDCOLL , DONE )END ;IF CURSORPTR <> NIL THEN DISPOSE (CURSORPTR , DONE );INHERITED DONE END ;
PROCEDURE TPXETABLEVIEW.SETLINEVAILDATOR (FTYP:PXFIELDTYPE);BEGIN CASE FTYP OF FLDCHAR , FLDBLOB :IF TABLELINE ^.
VALIDATOR <> NIL THEN BEGIN TABLELINE ^. VALIDATOR ^. FREE ;TABLELINE ^. VALIDATOR := NIL END ;FLDDOUBLE :TABLELINE ^.
SETVALIDATOR (NEW (PFILTERVALIDATOR , INIT ([ '0'.. '9', '+', '-', '.', 'E', 'e', ' '] )));FLDDATE :TABLELINE ^.
SETVALIDATOR (NEW (PPXPICTUREVALIDATOR , INIT ('{##}/{##}/{####}', TRUE )));FLDSHORT :TABLELINE ^. SETVALIDATOR (NEW
(PFILTERVALIDATOR , INIT ([ '0'.. '9', '+', '-', ' '] )));FLDLONG :TABLELINE ^. SETVALIDATOR (NEW (PFILTERVALIDATOR ,
INIT ([ '0'.. '9', '+', '-', ' '] )))END ;IF FTYP <> FLDBLOB THEN TABLELINE ^. SETSTATE (SFDISABLED , FALSE )ELSE
TABLELINE ^. SETSTATE (SFDISABLED , TRUE )END ;PROCEDURE TPXETABLEVIEW.DRAWLINE ;VAR OOIO,OOIl:INTEGER;OO1I:TRECT;
O10OO1000O0OI:PPXEFIELDDESC;BEGIN O10OO1000O0OI := FIELDDESCCOLL ^. AT (HSCROLLBAR ^. VALUE );TABLELINE ^. FIELDSTR :=
TRIMSTR (PSTRING (PPXEFIELD (PPXERECORD (RECORDCOLL ^. AT (TABLELINE ^. ORIGIN.Y - PXELINEOFS ))^. FLDCOLL ^. AT
(HSCROLLBAR ^. VALUE ))^. DISPSTR )^);TABLELINE ^. MAXLEN := O10OO1000O0OI ^. FDISPLEN ;TABLELINE ^. DATA ^:= TABLELINE
^. FIELDSTR ;IF SIZE.X > O10OO1000O0OI ^. FDISPLEN + 3 THEN OOIO := O10OO1000O0OI ^. FDISPLEN + 4 ELSE OOIO := SIZE.X + 1
;IF TABLELINE ^. ORIGIN.Y < SIZE.Y THEN OOIl := TABLELINE ^. ORIGIN.Y ELSE OOIl := SIZE.Y - 1 ;OO1I.ASSIGN (2 , OOIl ,
OOIO , OOIl + 1 );TABLELINE ^. LOCATE (OO1I );SETLINEVAILDATOR (O10OO1000O0OI ^. FDESC ^. FLDTYPE );TABLELINE ^. DRAWVIEW
;LOCKUPDATE END ;PROCEDURE TPXETABLEVIEW.DRAW ;VAR Ol00lI1:WORD;OOIl,OIO10011lII,OOlIllI1OOIO,OOlIllI1OOlI:INTEGER;
Ol00I1l0OOI1,Ol00II0lOOOO,Ol00II0lOlI1:STRING ;OIO1:TDRAWBUFFER;O10OO1000O0OI:PPXEFIELDDESC;BEGIN Ol00lI1 := GETCOLOR (6
);MOVECHAR (OIO1 , ' ', Ol00lI1 , SIZE.X );OIO10011lII := HSCROLLBAR ^. VALUE ;Ol00I1l0OOI1 := '';Ol00II0lOOOO := '┌';
Ol00II0lOlI1 := '└';OOlIllI1OOlI := SIZE.X ;REPEAT O10OO1000O0OI := FIELDDESCCOLL ^. AT (OIO10011lII );IF O10OO1000O0OI
^. FDISPLEN < OOlIllI1OOlI THEN OOlIllI1OOIO := O10OO1000O0OI ^. FDISPLEN + 2 ELSE OOlIllI1OOIO := OOlIllI1OOlI ;IF
OIO10011lII < PRIFIELDCNT THEN BEGIN Ol00I1l0OOI1 := Ol00I1l0OOI1 + ' ~'+ PADRIGHTSTR (O10OO1000O0OI ^. FDESC ^. FLDNAME
, ' ', OOlIllI1OOIO )+ '~';INC (OOlIllI1OOlI , 2 )END ELSE Ol00I1l0OOI1 := Ol00I1l0OOI1 + ' '+ PADRIGHTSTR (O10OO1000O0OI
^. FDESC ^. FLDNAME , ' ', OOlIllI1OOIO );Ol00II0lOOOO := Ol00II0lOOOO + FILLSTR ('─', OOlIllI1OOIO )+ '┬';Ol00II0lOlI1
:= Ol00II0lOlI1 + FILLSTR ('─', OOlIllI1OOIO )+ '┴';INC (OIO10011lII )UNTIL (BYTE (Ol00I1l0OOI1 [ 0 ] )> OOlIllI1OOlI )OR
(OIO10011lII =FIELDCNT );MOVECSTR (OIO1 , Ol00I1l0OOI1 , GETCOLOR ($0706 ));WRITEBUF (0 , 0 , SIZE.X , 1 , OIO1 );
Ol00II0lOOOO [ BYTE (Ol00II0lOOOO [ 0 ] )] := '┐';MOVESTR (OIO1 , Ol00II0lOOOO , Ol00lI1 );WRITEBUF (0 , 1 , SIZE.X , 1 ,
OIO1 );FOR OOIl := 2 TO SIZE.Y - 2 DO BEGIN OIO10011lII := HSCROLLBAR ^. VALUE ;Ol00I1l0OOI1 := '│ ';REPEAT Ol00I1l0OOI1
:= Ol00I1l0OOI1 + PSTRING (PPXEFIELD (PPXERECORD (RECORDCOLL ^. AT (OOIl - 2 ))^. FLDCOLL ^. AT (OIO10011lII ))^. DISPSTR
)^;IF BYTE (Ol00I1l0OOI1 [ 0 ] )> SIZE.X THEN BYTE (Ol00I1l0OOI1 [ 0 ] ):= SIZE.X + 1 ;Ol00I1l0OOI1 := Ol00I1l0OOI1 +
' │ ';INC (OIO10011lII )UNTIL (BYTE (Ol00I1l0OOI1 [ 0 ] )> SIZE.X )OR (OIO10011lII =FIELDCNT );MOVESTR (OIO1 ,
Ol00I1l0OOI1 , Ol00lI1 );WRITEBUF (0 , OOIl , SIZE.X , 1 , OIO1 )END ;Ol00II0lOlI1 [ BYTE (Ol00II0lOlI1 [ 0 ] )] := '┘';
MOVESTR (OIO1 , Ol00II0lOlI1 , Ol00lI1 );WRITEBUF (0 , SIZE.Y - 1 , SIZE.X , 1 , OIO1 );DRAWLINE END ;
FUNCTION TPXETABLEVIEW.ERRORBOX (ERRCODE:INTEGER):BOOLEAN ;BEGIN IF ERRCODE <> PXSUCCESS THEN BEGIN MESSAGEBOX (ENGINEPTR
^. GETERRORMESSAGE (ERRCODE )+ '.', NIL , MFERROR OR MFOKBUTTON );ERRORBOX := TRUE END ELSE ERRORBOX := FALSE END ;
PROCEDURE TPXETABLEVIEW.NEWFIELDCOLL ;VAR OIlO:FIELDNUMBER;O10OO1000O0OI:PPXEFIELDDESC;BEGIN FIELDDESCCOLL := NEW
(PCOLLECTION , INIT (FIELDCNT , 0 ));FOR OIlO := 1 TO FIELDCNT DO BEGIN O10OO1000O0OI := NEW (PPXEFIELDDESC , INIT );
O10OO1000O0OI ^. FDESC := NEW (PFIELDDESC , INIT );CURSORPTR ^. GENERICREC ^. GETFIELDDESC (OIlO , O10OO1000O0OI ^. FDESC
);CASE O10OO1000O0OI ^. FDESC ^. FLDTYPE OF FLDCHAR :O10OO1000O0OI ^. FDISPLEN := O10OO1000O0OI ^. FDESC ^. FLDLEN ;
FLDSHORT :O10OO1000O0OI ^. FDISPLEN := 6 ;FLDLONG :O10OO1000O0OI ^. FDISPLEN := 11 ;FLDDOUBLE :O10OO1000O0OI ^. FDISPLEN
:= 17 ;FLDDATE :O10OO1000O0OI ^. FDISPLEN := 10 ;FLDBLOB :CASE O10OO1000O0OI ^. FDESC ^. FLDSUBTYPE OF FLDSTMEMO
:O10OO1000O0OI ^. FDISPLEN := BYTE (PXEBLOBNAMES [ 0 , 0 ] );FLDSTBINARY :O10OO1000O0OI ^. FDISPLEN := BYTE (PXEBLOBNAMES
[ 1 , 0 ] );FLDSTFMTMEMO :O10OO1000O0OI ^. FDISPLEN := BYTE (PXEBLOBNAMES [ 2 , 0 ] );FLDSTOLEOBJ :O10OO1000O0OI ^.
FDISPLEN := BYTE (PXEBLOBNAMES [ 3 , 0 ] );FLDSTGRAPHIC :O10OO1000O0OI ^. FDISPLEN := BYTE (PXEBLOBNAMES [ 4 , 0 ] )END
END ;FIELDDESCCOLL ^. INSERT (O10OO1000O0OI )END END ;PROCEDURE TPXETABLEVIEW.NEWRECCOLL ;VAR OIlO:INTEGER;
OIO111ll00I:PCOLLECTION;O10O0l1IO0101:PPXERECORD;PROCEDURE OOIII0I1O11l (OI1000l1II00:POINTER);FAR ;
VAR OIO0OlOl1OO:PPXEFIELD;BEGIN OIO0OlOl1OO := NEW (PPXEFIELD , INIT );OIO0OlOl1OO ^. DISPSTR := NEWSTR (FILLSTR (' ',
PPXEFIELDDESC (OI1000l1II00 )^. FDISPLEN ));OIO111ll00I ^. INSERT (OIO0OlOl1OO )END ;BEGIN RECORDCOLL := NEW (PCOLLECTION
, INIT (PXEMAXRECBUFS , 0 ));FOR OIlO := 1 TO PXEMAXRECBUFS DO BEGIN OIO111ll00I := NEW (PCOLLECTION , INIT (FIELDCNT ,
0 ));FIELDDESCCOLL ^. FOREACH (@ OOIII0I1O11l );O10O0l1IO0101 := NEW (PPXERECORD , INIT );O10O0l1IO0101 ^. FLDCOLL :=
OIO111ll00I ;RECORDCOLL ^. INSERT (O10O0l1IO0101 )END END ;PROCEDURE TPXETABLEVIEW.XLATEFIELD (RECDATA:PPXERECORD;
PFLD:PPXEFIELDDESC);VAR O10111IIlO0ll:BOOLEAN;OO1O:INTEGER;OO01:LONGINT;OIOO:DOUBLE;OOO0IlO0OI1O:STRING ;
Ol00II10ll1l:PSTRING;BEGIN Ol00II10ll1l := PSTRING (PPXEFIELD (RECDATA ^. FLDCOLL ^. AT (PFLD ^. FDESC ^. FLDNUM - 1 ))^.
DISPSTR );IF NOT CURSORPTR ^. GENERICREC ^. ISNULL (PFLD ^. FDESC ^. FLDNUM )THEN BEGIN CASE PFLD ^. FDESC ^. FLDTYPE
OF FLDCHAR :BEGIN CURSORPTR ^. GENERICREC ^. GETSTRING (PFLD ^. FDESC ^. FLDNUM , OOO0IlO0OI1O , O10111IIlO0ll );
OOO0IlO0OI1O := PADRIGHTSTR (OOO0IlO0OI1O , ' ', PFLD ^. FDISPLEN )END ;FLDDOUBLE :BEGIN CURSORPTR ^. GENERICREC ^.
GETDOUBLE (PFLD ^. FDESC ^. FLDNUM , OIOO , O10111IIlO0ll );IF (ABS (OIOO )< PXEFIXEDMAX )THEN STR (OIOO :17 :2 ,
OOO0IlO0OI1O )ELSE STR (OIOO :17 , OOO0IlO0OI1O )END ;FLDDATE :CURSORPTR ^. GENERICREC ^. GETSTRING (PFLD ^. FDESC ^.
FLDNUM , OOO0IlO0OI1O , O10111IIlO0ll );FLDSHORT :BEGIN CURSORPTR ^. GENERICREC ^. GETFIELD (PFLD ^. FDESC ^. FLDNUM , @
OO1O , SIZEOF (OO1O ), O10111IIlO0ll );STR (OO1O :6 , OOO0IlO0OI1O )END ;FLDBLOB :CASE PFLD ^. FDESC ^. FLDSUBTYPE
OF FLDSTMEMO :OOO0IlO0OI1O := PXEBLOBNAMES [ 0 ] ;FLDSTBINARY :OOO0IlO0OI1O := PXEBLOBNAMES [ 1 ] ;FLDSTFMTMEMO
:OOO0IlO0OI1O := PXEBLOBNAMES [ 2 ] ;FLDSTOLEOBJ :OOO0IlO0OI1O := PXEBLOBNAMES [ 3 ] ;FLDSTGRAPHIC :OOO0IlO0OI1O :=
PXEBLOBNAMES [ 4 ] END ;FLDLONG :BEGIN CURSORPTR ^. GENERICREC ^. GETFIELD (PFLD ^. FDESC ^. FLDNUM , @ OO01 , SIZEOF
(OO01 ), O10111IIlO0ll );STR (OO01 :11 , OOO0IlO0OI1O )END END ;Ol00II10ll1l ^:= OOO0IlO0OI1O END ELSE Ol00II10ll1l ^:=
FILLSTR (' ', PFLD ^. FDISPLEN )END ;PROCEDURE TPXETABLEVIEW.READFIELDS ;VAR OIlO:INTEGER;O10O0l1IO00IO:PPXERECORD;
PROCEDURE OI1I01lO00 (OI1000l1II00:POINTER);FAR ;BEGIN XLATEFIELD (O10O0l1IO00IO , OI1000l1II00 )END ;
PROCEDURE OOIlII01lO1I (OI1000l1II00:POINTER);FAR ;VAR Ol00II10ll1l:PSTRING;OIO1001I000:PPXEFIELDDESC;BEGIN OIO1001I000
:= OI1000l1II00 ;Ol00II10ll1l := PSTRING (PPXEFIELD (O10O0l1IO00IO ^. FLDCOLL ^. AT (OIO1001I000 ^. FDESC ^. FLDNUM - 1
))^. DISPSTR );Ol00II10ll1l ^:= FILLSTR (' ', OIO1001I000 ^. FDISPLEN )END ;BEGIN IF (ENGINEPTR ^. ENGINETYPE <> PXLOCAL
)AND (CURSORPTR ^. HASCHANGED )THEN CURSORPTR ^. REFRESH ;FOR OIlO := 0 TO RECBUFS - 1 DO BEGIN O10O0l1IO00IO :=
RECORDCOLL ^. AT (OIlO );IF CURSORPTR ^. LASTERROR =PXSUCCESS THEN BEGIN CURSORPTR ^. GETRECORD (CURSORPTR ^. GENERICREC
);IF CURSORPTR ^. LASTERROR =PXSUCCESS THEN BEGIN O10O0l1IO00IO ^. RECNUM := CURSORPTR ^. GETCURRECNUM ;FIELDDESCCOLL ^.
FOREACH (@ OI1I01lO00 );CURSORPTR ^. GOTONEXT END ELSE BEGIN O10O0l1IO00IO ^. RECNUM := 0 ;FIELDDESCCOLL ^. FOREACH (@
OOIlII01lO1I )END END ELSE BEGIN O10O0l1IO00IO ^. RECNUM := 0 ;FIELDDESCCOLL ^. FOREACH (@ OOIlII01lO1I )END END ;IF
CURSORPTR ^. LASTERROR =PXERR_ENDOFTABLE THEN GOTOLAST ;LOCKUPDATE END ;FUNCTION TPXETABLEVIEW.SEARCHKEY
(RECDATA:PPXERECORD;SMODE:INTEGER):RETCODE ;VAR OIlO:INTEGER;BEGIN CURSORPTR ^. GENERICREC ^. CLEAR ;IF PRIFIELDCNT <> 0
THEN BEGIN FOR OIlO := 0 TO PRIFIELDCNT - 1 DO CURSORPTR ^. GENERICREC ^. PUTSTRING (OIlO + 1 , PSTRING (PPXEFIELD
(RECDATA ^. FLDCOLL ^. AT (OIlO ))^. DISPSTR )^);SEARCHKEY := PXSRCHKEY (TABLEHAN , CURSORPTR ^. GENERICREC ^. RECH ,
PRIFIELDCNT , SMODE )END ELSE IF RECDATA ^. RECNUM <> 0 THEN SEARCHKEY := CURSORPTR ^. GOTOREC (RECDATA ^. RECNUM )ELSE
SEARCHKEY := GOTOHOME END ;FUNCTION TPXETABLEVIEW.SEARCHSECKEY (RECDATA:PPXERECORD;SMODE:INTEGER):RETCODE ;
VAR OIlO:INTEGER;BEGIN CURSORPTR ^. GENERICREC ^. CLEAR ;IF PRIFIELDCNT <> 0 THEN BEGIN FOR OIlO := 0 TO FIELDCNT - 1
DO CURSORPTR ^. GENERICREC ^. PUTSTRING (OIlO + 1 , PSTRING (PPXEFIELD (RECDATA ^. FLDCOLL ^. AT (OIlO ))^. DISPSTR )^);
SEARCHSECKEY := PXSRCHFLD (TABLEHAN , CURSORPTR ^. GENERICREC ^. RECH , INDEXNUMBER , SMODE );END ELSE IF RECDATA ^.
RECNUM <> 0 THEN SEARCHSECKEY := CURSORPTR ^. GOTOREC (RECDATA ^. RECNUM )ELSE SEARCHSECKEY := GOTOHOME ;END ;
PROCEDURE TPXETABLEVIEW.REFRESH ;BEGIN IF INDEXNUMBER =0 THEN BEGIN IF SEARCHKEY (RECORDCOLL ^. AT (0 ), SEARCHFIRST )<>
PXSUCCESS THEN SEARCHKEY (RECORDCOLL ^. AT (0 ), CLOSESTRECORD )END ELSE BEGIN IF SEARCHKEY (RECORDCOLL ^. AT (0 ),
SEARCHFIRST )<> PXSUCCESS THEN SEARCHSECKEY (RECORDCOLL ^. AT (0 ), CLOSESTRECORD )END ;READFIELDS ;DRAWVIEW END ;
FUNCTION TPXETABLEVIEW.GOTOHOME :RETCODE ;BEGIN IF (ENGINEPTR ^. ENGINETYPE <> PXLOCAL )AND (CURSORPTR ^. HASCHANGED
)THEN CURSORPTR ^. REFRESH ;WITH CURSORPTR^ DO BEGIN GOTOBEGIN ;IF LASTERROR =PXSUCCESS THEN GOTONEXT END ;GOTOHOME :=
CURSORPTR ^. LASTERROR END ;FUNCTION TPXETABLEVIEW.GOTOLAST :RETCODE ;BEGIN IF (ENGINEPTR ^. ENGINETYPE <> PXLOCAL )AND
(CURSORPTR ^. HASCHANGED )THEN CURSORPTR ^. REFRESH ;WITH CURSORPTR^ DO BEGIN GOTOEND ;IF LASTERROR =PXSUCCESS THEN
GOTOPREV END ;GOTOLAST := CURSORPTR ^. LASTERROR END ;FUNCTION TPXETABLEVIEW.DOWNREAD :RETCODE ;VAR OIlO:INTEGER;
O10O0l1IO00IO:PPXERECORD;PROCEDURE OI1I01lO00 (OI1000l1II00:POINTER);FAR ;BEGIN XLATEFIELD (O10O0l1IO00IO , OI1000l1II00
)END ;PROCEDURE OOIlII01lO1I (OI1000l1II00:POINTER);FAR ;VAR Ol00II10ll1l:PSTRING;OIO1001I000:PPXEFIELDDESC;
BEGIN OIO1001I000 := OI1000l1II00 ;Ol00II10ll1l := PSTRING (PPXEFIELD (O10O0l1IO00IO ^. FLDCOLL ^. AT (OIO1001I000 ^.
FDESC ^. FLDNUM - 1 ))^. DISPSTR );Ol00II10ll1l ^:= FILLSTR (' ', OIO1001I000 ^. FDISPLEN )END ;BEGIN IF TABLELINE ^.
ORIGIN.Y < SIZE.Y - 1 THEN BEGIN INC (TABLELINE ^. ORIGIN.Y );DRAWVIEW ;DOWNREAD := PXSUCCESS END ELSE IF PPXERECORD
(RECORDCOLL ^. AT (SIZE.Y - 4 ))^. RECNUM <> 0 THEN BEGIN IF (ENGINEPTR ^. ENGINETYPE <> PXLOCAL )AND (CURSORPTR ^.
HASCHANGED )THEN CURSORPTR ^. REFRESH ;O10O0l1IO00IO := NEW (PPXERECORD , INIT );O10O0l1IO00IO ^:= PPXERECORD (RECORDCOLL
^. AT (0 ))^;SEARCHKEY (RECORDCOLL ^. AT (RECBUFS - 1 ), SEARCHFIRST );RECORDCOLL ^. FREE (RECORDCOLL ^. AT (0 ));
RECORDCOLL ^. ATINSERT (RECBUFS - 1 , O10O0l1IO00IO );CURSORPTR ^. GOTONEXT ;IF CURSORPTR ^. LASTERROR <>
PXERR_ENDOFTABLE THEN BEGIN CURSORPTR ^. GETRECORD (CURSORPTR ^. GENERICREC );O10O0l1IO00IO ^. RECNUM := CURSORPTR ^.
GETCURRECNUM ;FIELDDESCCOLL ^. FOREACH (@ OI1I01lO00 )END ELSE BEGIN O10O0l1IO00IO ^. RECNUM := 0 ;FIELDDESCCOLL ^.
FOREACH (@ OOIlII01lO1I )END ;DRAWVIEW ;DOWNREAD := CURSORPTR ^. LASTERROR END END ;FUNCTION TPXETABLEVIEW.UPREAD
:RETCODE ;VAR OIlO:INTEGER;O10O0l1IO00IO:PPXERECORD;PROCEDURE OI1I01lO00 (OI1000l1II00:POINTER);FAR ;BEGIN XLATEFIELD
(O10O0l1IO00IO , OI1000l1II00 )END ;BEGIN IF TABLELINE ^. ORIGIN.Y > 3 THEN BEGIN DEC (TABLELINE ^. ORIGIN.Y );DRAWVIEW ;
UPREAD := PXSUCCESS END ELSE BEGIN IF (ENGINEPTR ^. ENGINETYPE <> PXLOCAL )AND (CURSORPTR ^. HASCHANGED )THEN CURSORPTR
^. REFRESH ;SEARCHKEY (RECORDCOLL ^. AT (0 ), SEARCHFIRST );CURSORPTR ^. GOTOPREV ;IF CURSORPTR ^. LASTERROR <>
PXERR_STARTOFTABLE THEN BEGIN O10O0l1IO00IO := NEW (PPXERECORD , INIT );O10O0l1IO00IO ^:= PPXERECORD (RECORDCOLL ^. AT
(RECBUFS - 1 ))^;RECORDCOLL ^. FREE (RECORDCOLL ^. AT (RECBUFS - 1 ));RECORDCOLL ^. ATINSERT (0 , O10O0l1IO00IO );
CURSORPTR ^. GETRECORD (CURSORPTR ^. GENERICREC );O10O0l1IO00IO ^. RECNUM := CURSORPTR ^. GETCURRECNUM ;FIELDDESCCOLL ^.
FOREACH (@ OI1I01lO00 )END ;DRAWVIEW ;UPREAD := CURSORPTR ^. LASTERROR END END ;FUNCTION TPXETABLEVIEW.PAGEDOWNREAD
:RETCODE ;VAR OIlO:INTEGER;O10O0l1IO0101:PPXERECORD;BEGIN O10O0l1IO0101 := RECORDCOLL ^. AT (SIZE.Y - 4 );IF
O10O0l1IO0101 ^. RECNUM <> 0 THEN BEGIN SEARCHKEY (O10O0l1IO0101 , SEARCHFIRST );CURSORPTR ^. GOTONEXT ;IF CURSORPTR ^.
LASTERROR =PXERR_ENDOFTABLE THEN GOTOLAST ;READFIELDS ;IF O10O0l1IO0101 ^. RECNUM =0 THEN BEGIN FOR OIlO := 6 TO SIZE.Y
DO CURSORPTR ^. GOTOPREV ;IF CURSORPTR ^. LASTERROR =PXERR_STARTOFTABLE THEN GOTOHOME ;READFIELDS END ;DRAWVIEW END ;
PAGEDOWNREAD := CURSORPTR ^. LASTERROR END ;FUNCTION TPXETABLEVIEW.PAGEUPREAD :RETCODE ;VAR OIlO:INTEGER;BEGIN SEARCHKEY
(RECORDCOLL ^. AT (0 ), SEARCHFIRST );FOR OIlO := 4 TO SIZE.Y DO CURSORPTR ^. GOTOPREV ;IF CURSORPTR ^. LASTERROR
=PXERR_STARTOFTABLE THEN GOTOHOME ;IF CURSORPTR ^. LASTERROR =PXSUCCESS THEN BEGIN READFIELDS ;DRAWVIEW END ;PAGEUPREAD
:= CURSORPTR ^. LASTERROR END ;FUNCTION TPXETABLEVIEW.HOMEREAD :RETCODE ;BEGIN GOTOHOME ;READFIELDS ;DRAWVIEW ;HOMEREAD
:= CURSORPTR ^. LASTERROR END ;FUNCTION TPXETABLEVIEW.ENDREAD :RETCODE ;VAR OIlO:INTEGER;BEGIN GOTOLAST ;FOR OIlO := 6 TO
SIZE.Y DO CURSORPTR ^. GOTOPREV ;IF CURSORPTR ^. LASTERROR =PXERR_STARTOFTABLE THEN GOTOHOME ;READFIELDS ;DRAWVIEW ;
ENDREAD := CURSORPTR ^. LASTERROR END ;FUNCTION TPXETABLEVIEW.LOCKREC (RECDATA:PPXERECORD):RETCODE ;
VAR OOO1IlI0l0OI:RETCODE;OIO1O1II01l:WORD;O11lOl0I1O:LONGINT;OIl1I0IlOO:STRING ;BEGIN IF RECDATA ^. RECNUM <> 0 THEN
BEGIN IF EDITLOCKHAN =0 THEN BEGIN OOO1IlI0l0OI := SEARCHKEY (RECDATA , SEARCHFIRST );IF OOO1IlI0l0OI =PXSUCCESS THEN
BEGIN IF ENGINEPTR ^. ENGINETYPE <> PXLOCAL THEN BEGIN REPEAT EDITLOCKHAN := CURSORPTR ^. LOCKRECORD ;OOO1IlI0l0OI :=
CURSORPTR ^. LASTERROR ;IF OOO1IlI0l0OI =PXERR_RECLOCKED THEN BEGIN OIl1I0IlOO := DATABASEPTR ^. GETNETERRUSER ;IF
OIl1I0IlOO =''THEN OIl1I0IlOO := 'unknown or local user';O11lOl0I1O := LONGINT (@ OIl1I0IlOO );OIO1O1II01l := MESSAGEBOX
('Record is locked by %s. Try to lock record again?', @ O11lOl0I1O , MFYESBUTTON + MFNOBUTTON )END ELSE OIO1O1II01l :=
CMNO UNTIL (OOO1IlI0l0OI =PXSUCCESS )OR (OIO1O1II01l =CMNO );IF OOO1IlI0l0OI =PXSUCCESS THEN EDITLOCKRECNUM := RECDATA ^.
RECNUM ELSE BEGIN TABLELINE ^. DATA ^:= TABLELINE ^. FIELDSTR ;TABLELINE ^. DRAWVIEW END END ELSE BEGIN EDITLOCKHAN :=
RECDATA ^. RECNUM ;EDITLOCKRECNUM := EDITLOCKHAN END END END ELSE OOO1IlI0l0OI := SEARCHKEY (RECDATA , SEARCHFIRST )END
ELSE BEGIN EDITLOCKHAN := 0 ;EDITLOCKRECNUM := 0 ;OOO1IlI0l0OI := PXSUCCESS END ;IF (OOO1IlI0l0OI =PXERR_RECDELETED )OR
(OOO1IlI0l0OI =PXERR_RECNOTFOUND )THEN REFRESH ;LOCKREC := OOO1IlI0l0OI END ;FUNCTION TPXETABLEVIEW.UNLOCKREC :RETCODE ;
BEGIN IF (ENGINEPTR ^. ENGINETYPE <> PXLOCAL )AND (EDITLOCKHAN <> 0 )THEN CURSORPTR ^. UNLOCKRECORD (EDITLOCKHAN );
EDITLOCKHAN := 0 ;EDITLOCKRECNUM := 0 ;UNLOCKREC := CURSORPTR ^. LASTERROR END ;FUNCTION TPXETABLEVIEW.LOCKUPDATE
:RETCODE ;BEGIN IF (PPXERECORD (RECORDCOLL ^. AT (TABLELINE ^. ORIGIN.Y - PXELINEOFS ))^. RECNUM <> EDITLOCKRECNUM )OR
(STATE AND SFSELECTED <> 0 )THEN LOCKUPDATE := UNLOCKREC ELSE LOCKUPDATE := PXSUCCESS END ;
FUNCTION TPXETABLEVIEW.WRITEFIELD :RETCODE ;BEGIN WRITEFIELD := CURSORPTR ^. LASTERROR END ;
FUNCTION TPXETABLEVIEW.BLOBMEMOEDIT :RETCODE ;VAR O101I1lllO0OO:LONGINT;OOO1IlI0l0OI:RETCODE;
O10OO1000O0OI:PPXEFIELDDESC;OOO0O1lIIOO1:PPXEMEMOREC;OOIIOOlOl0Il:PPXEMEMOEDIT;PROCEDURE O10OlOO0O1l1O ;
VAR OOIl000I1:CHAR;OI110IlIOIO1:WORD;BEGIN IF OOO0O1lIIOO1 ^. LEN > 0 THEN BEGIN OOIl000I1 := #0;FOR OI110IlIOIO1 := 0 TO
OOO0O1lIIOO1 ^. LEN - 1 DO BEGIN IF (OOO0O1lIIOO1 ^. DATA [ OI110IlIOIO1 ] =#10)AND (OOIl000I1 <> #13)THEN
BEGIN OOIl000I1 := OOO0O1lIIOO1 ^. DATA [ OI110IlIOIO1 ] ;OOO0O1lIIOO1 ^. DATA [ OI110IlIOIO1 ] := #13;END ELSE OOIl000I1
:= OOO0O1lIIOO1 ^. DATA [ OI110IlIOIO1 ] END END END ;BEGIN O10OO1000O0OI := FIELDDESCCOLL ^. AT (HSCROLLBAR ^. VALUE );
OOO1IlI0l0OI := CURSORPTR ^. GENERICREC ^. OPENBLOBREAD (O10OO1000O0OI ^. FDESC ^. FLDNUM , TRUE );IF NOT ERRORBOX
(OOO1IlI0l0OI )THEN BEGIN O101I1lllO0OO := CURSORPTR ^. GENERICREC ^. GETBLOBSIZE (O10OO1000O0OI ^. FDESC ^. FLDNUM );IF
O101I1lllO0OO < PXEMAXUMEMOSIZE THEN BEGIN OOO0O1lIIOO1 := MEMALLOC (SIZEOF (TPXEMEMOREC ));OOO0O1lIIOO1 ^. LEN :=
O101I1lllO0OO ;OOIIOOlOl0Il := NEW (PPXEMEMOEDIT , INIT );IF OOIIOOlOl0Il ^. VALID (CMVALID )THEN BEGIN IF O101I1lllO0OO
<> 0 THEN BEGIN OOO1IlI0l0OI := CURSORPTR ^. GENERICREC ^. GETBLOB (O10OO1000O0OI ^. FDESC ^. FLDNUM , O101I1lllO0OO , 0
, @ OOO0O1lIIOO1 ^. DATA );O10OlOO0O1l1O END ;CURSORPTR ^. GENERICREC ^. CLOSEBLOB (O10OO1000O0OI ^. FDESC ^. FLDNUM ,
FALSE );APPLICATION ^. EXECUTEDIALOG (OOIIOOlOl0Il , OOO0O1lIIOO1 );FREEMEM (OOO0O1lIIOO1 , SIZEOF (TPXEMEMOREC ))END
ELSE BEGIN CURSORPTR ^. GENERICREC ^. CLOSEBLOB (O10OO1000O0OI ^. FDESC ^. FLDNUM , FALSE );IF OOO0O1lIIOO1 <> NIL THEN
FREEMEM (OOO0O1lIIOO1 , SIZEOF (TPXEMEMOREC ));DISPOSE (OOIIOOlOl0Il , DONE );APPLICATION ^. OUTOFMEMORY END END ELSE
BEGIN CURSORPTR ^. GENERICREC ^. CLOSEBLOB (O10OO1000O0OI ^. FDESC ^. FLDNUM , FALSE );MESSAGEBOX
(#3'Memo blob too large to fit editor buffer.', NIL , MFERROR OR MFOKBUTTON )END END ;BLOBMEMOEDIT := OOO1IlI0l0OI END ;
FUNCTION TPXETABLEVIEW.BLOBEDIT :RETCODE ;VAR O10OO1000O0OI:PPXEFIELDDESC;O10O0l1IO0101:PPXERECORD;BEGIN O10OO1000O0OI :=
FIELDDESCCOLL ^. AT (HSCROLLBAR ^. VALUE );O10O0l1IO0101 := RECORDCOLL ^. AT (TABLELINE ^. ORIGIN.Y - PXELINEOFS );IF
(O10O0l1IO0101 ^. RECNUM <> 0 )AND (O10OO1000O0OI ^. FDESC ^. FLDTYPE =FLDBLOB )THEN BEGIN IF (LOCKREC (O10O0l1IO0101
)=PXSUCCESS )AND (CURSORPTR ^. GETRECORD (CURSORPTR ^. GENERICREC )=PXSUCCESS )THEN CASE O10OO1000O0OI ^. FDESC ^.
FLDSUBTYPE OF FLDSTMEMO :BLOBMEMOEDIT ELSE MESSAGEBOX (#3'This BLOB format not currently supported', NIL , MFINFORMATION
+ MFOKBUTTON )END END ;BLOBEDIT := CURSORPTR ^. LASTERROR END ;FUNCTION TPXETABLEVIEW.DELETEREC :RETCODE ;
VAR OIlO:INTEGER;O10O0l1IO0101:PPXERECORD;BEGIN OIlO := TABLELINE ^. ORIGIN.Y - PXELINEOFS ;O10O0l1IO0101 := RECORDCOLL
^. AT (OIlO );IF O10O0l1IO0101 ^. RECNUM <> 0 THEN IF LOCKREC (O10O0l1IO0101 )=PXSUCCESS THEN BEGIN IF CURSORPTR ^.
DELETEREC =PXSUCCESS THEN BEGIN EDITLOCKHAN := 0 ;EDITLOCKRECNUM := 0 ;IF OIlO <> 0 THEN BEGIN GOTOHOME ;REFRESH END ELSE
BEGIN CURSORPTR ^. GOTONEXT ;READFIELDS ;DRAWVIEW END END END ;DELETEREC := CURSORPTR ^. LASTERROR END ;
PROCEDURE TPXETABLEVIEW.HANDLEEVENT (VAR EVENT:TEVENT);BEGIN INHERITED HANDLEEVENT(EVENT );CASE EVENT.WHAT OF EVKEYDOWN
:BEGIN CASE EVENT.KEYCODE OF KBDOWN :DOWNREAD ;KBUP :UPREAD ;KBPGDN :PAGEDOWNREAD ;KBPGUP :PAGEUPREAD ;KBCTRLPGUP
:HOMEREAD ;KBCTRLPGDN :ENDREAD ELSE CASE EVENT.CHARCODE OF ^Y :DELETEREC ELSE EXIT END END ;CLEAREVENT (EVENT )END ;
EVBROADCAST :BEGIN CASE EVENT.COMMAND OF CMSCROLLBARCHANGED :BEGIN IF EVENT.INFOPTR =HSCROLLBAR THEN DRAWVIEW END ;
CMFIELDEXIT :BEGIN IF TABLELINE ^. FIELDSTR <> TABLELINE ^. DATA ^THEN BEGIN IF ERRORBOX (WRITEFIELD )THEN
BEGIN TABLELINE ^. SELEND := 0 ;DRAWLINE END END ELSE UNLOCKREC END END END END END ;FUNCTION TPXETABLEVIEW.VALID
(COMMAND:WORD):BOOLEAN ;VAR OIOI100IlI0:BOOLEAN;BEGIN OIOI100IlI0 := INHERITED VALID(COMMAND );IF COMMAND
=CMRELEASEDFOCUS THEN OIOI100IlI0 := LOCKREC (RECORDCOLL ^. AT (TABLELINE ^. ORIGIN.Y - PXELINEOFS ))=PXSUCCESS ;VALID :=
OIOI100IlI0 END ;CONSTRUCTOR TPXETABLEWIN.INIT (TBLNAME:PATHSTR;ENGPTR:PENGINE;DBPTR:PDATABASE;CURPTR:PCURSOR;
IDXNUM:FIELDNUMBER);VAR OO1I:TRECT;OOIOI1II000O:PSCROLLBAR;BEGIN DESKTOP ^. GETEXTENT (OO1I );INHERITED INIT(OO1I ,
TBLNAME );OPTIONS := OPTIONS OR OFVALIDATE OR OFTILEABLE ;FLAGS := WFMOVE + WFGROW + WFCLOSE + WFZOOM ;GROWMODE :=
GFGROWREL ;PALETTE := DPBLUEDIALOG ;OOIOI1II000O := STANDARDSCROLLBAR (SBHORIZONTAL OR SBHANDLEKEYBOARD );INSERT
(OOIOI1II000O );GETEXTENT (OO1I );OO1I.GROW (- 1 , - 1 );TABLEVIEW := NEW (PPXETABLEVIEW , INIT (OO1I , OOIOI1II000O ,
TBLNAME , ENGPTR , DBPTR , CURPTR , IDXNUM ));INSERT (TABLEVIEW );OO1I.ASSIGN (2 , 3 , 10 , 4 );TABLEVIEW ^. TABLELINE :=
NEW (PPXETABLELINE , INIT (OO1I , 255 ));INSERT (TABLEVIEW ^. TABLELINE );TABLEVIEW ^. TABLELINE ^. MOVETO (2 , 3 );
SELECTNEXT (FALSE )END ;PROCEDURE TPXETABLEWIN.SIZELIMITS (VAR MIN,MAX:TPOINT);BEGIN INHERITED SIZELIMITS(MIN , MAX );IF
TABLEVIEW ^. TABLELINE ^. STATE AND SFSELECTED <> 0 THEN BEGIN MIN := SIZE ;MAX := SIZE END END ;
PROCEDURE TPXETABLEWIN.SETSTATE (ASTATE:WORD;ENABLE:BOOLEAN);BEGIN INHERITED SETSTATE(ASTATE , ENABLE );IF ASTATE
=SFACTIVE THEN BEGIN IF ENABLE THEN BEGIN TABLEVIEW ^. REFRESH ;ENABLECOMMANDS (PXEEDITCMDS )END ELSE DISABLECOMMANDS
(PXEEDITCMDS )END END ;PROCEDURE TPXETABLEWIN.HANDLEEVENT (VAR EVENT:TEVENT);PROCEDURE O10OIIlOlIO11 ;
VAR OOlOO0O1lO0I:INTEGER;BEGIN WITH TABLEVIEW^ DO BEGIN IF EVENT.KEYCODE =KBTAB THEN BEGIN IF HSCROLLBAR ^. VALUE <
FIELDCNT - 1 THEN OOlOO0O1lO0I := 1 ELSE OOlOO0O1lO0I := 0 END ELSE BEGIN IF HSCROLLBAR ^. VALUE > 0 THEN OOlOO0O1lO0I :=
- 1 ELSE OOlOO0O1lO0I := 0 END ;IF OOlOO0O1lO0I <> 0 THEN BEGIN IF TABLELINE ^. STATE AND SFSELECTED <> 0 THEN BEGIN IF
TABLELINE ^. FIELDSTR <> TABLELINE ^. DATA ^THEN BEGIN IF NOT ERRORBOX (WRITEFIELD )THEN BEGIN IF EDITLOCKRECNUM =0 THEN
FOCUS ELSE BEGIN HSCROLLBAR ^. SETVALUE (HSCROLLBAR ^. VALUE + OOlOO0O1lO0I );TABLELINE ^. SELECTALL (TRUE )END END END
ELSE BEGIN HSCROLLBAR ^. SETVALUE (HSCROLLBAR ^. VALUE + OOlOO0O1lO0I );TABLELINE ^. SELECTALL (TRUE )END END ELSE
HSCROLLBAR ^. SETVALUE (HSCROLLBAR ^. VALUE + OOlOO0O1lO0I )END ;CLEAREVENT (EVENT )END END ;PROCEDURE OOlOOOlOI1Ol ;
BEGIN WITH TABLEVIEW^ DO BEGIN IF PPXEFIELDDESC (FIELDDESCCOLL ^. AT (HSCROLLBAR ^. VALUE ))^. FDESC ^. FLDTYPE <>
FLDBLOB THEN BEGIN IF TABLELINE ^. STATE AND SFSELECTED =0 THEN TABLELINE ^. FOCUS ELSE TABLEVIEW ^. FOCUS END ELSE
TABLEVIEW ^. BLOBEDIT ;LOCKUPDATE END END ;PROCEDURE O1lI0ll100OO ;VAR OOII0IOOI010:STRING ;
BEGIN WITH TABLEVIEW^ DO BEGIN IF (CLIPBOARD <> NIL )AND (TABLELINE ^. STATE AND SFSELECTED <> 0 )AND (TABLELINE ^.
SELEND > 0 )THEN BEGIN OOII0IOOI010 := COPY (TABLELINE ^. DATA ^, TABLELINE ^. SELSTART + 1 , TABLELINE ^. SELEND -
TABLELINE ^. SELSTART );CLIPBOARD ^. INSERTTEXT (@ OOII0IOOI010 [ 1 ] , BYTE (OOII0IOOI010 [ 0 ] ), TRUE )END END END ;
PROCEDURE O1lIlOl1OlIO ;VAR OOIlIlIlI010:WORD;OOO0IlO0OI1O:STRING ;O10OO1000O0OI:PPXEFIELDDESC;
BEGIN WITH TABLEVIEW^ DO IF (CLIPBOARD <> NIL )AND (TABLELINE ^. STATE AND SFSELECTED <> 0 )THEN BEGIN O10OO1000O0OI :=
FIELDDESCCOLL ^. AT (HSCROLLBAR ^. VALUE );OOO0IlO0OI1O := '';OOIlIlIlI010 := CLIPBOARD ^. SELSTART ;WHILE (OOIlIlIlI010
< CLIPBOARD ^. SELEND )AND (BYTE (OOO0IlO0OI1O [ 0 ] )< O10OO1000O0OI ^. FDISPLEN ) DO BEGIN OOO0IlO0OI1O := OOO0IlO0OI1O
+ CLIPBOARD ^. BUFCHAR (OOIlIlIlI010 );INC (OOIlIlIlI010 )END ;IF OOO0IlO0OI1O <> ''THEN TABLELINE ^. SETDATA
(OOO0IlO0OI1O )END END ;BEGIN CASE EVENT.WHAT OF EVKEYDOWN :BEGIN CASE EVENT.KEYCODE OF KBTAB , KBSHIFTTAB
:O10OIIlOlIO11 ;KBENTER :OOlOOOlOI1Ol END END END ;INHERITED HANDLEEVENT(EVENT );CASE EVENT.WHAT OF EVCOMMAND
:BEGIN CASE EVENT.COMMAND OF CMCOPY :O1lI0ll100OO ;CMPASTE :O1lIlOl1OlIO END END ;EVBROADCAST :BEGIN CASE EVENT.COMMAND
OF CMFIELDENTER :BEGIN TABLEVIEW ^. HSCROLLBAR ^. SETSTATE (SFDISABLED , TRUE );FLAGS := FLAGS AND NOT WFZOOM ;FRAME ^.
DRAWVIEW END ;CMFIELDEXIT :BEGIN TABLEVIEW ^. HSCROLLBAR ^. SETSTATE (SFDISABLED , FALSE );FLAGS := FLAGS OR WFZOOM ;
FRAME ^. DRAWVIEW END ;CMVIDEOCHANGE :BEGIN TABLEVIEW ^. RECBUFS := DESKTOP ^. SIZE.Y - PXERECBUFDIFF ;IF STATE AND
SFSELECTED <> 0 THEN TABLEVIEW ^. REFRESH END END END END END ;FUNCTION TPXETABLEWIN.VALID (COMMAND:WORD):BOOLEAN ;
VAR OIOI100IlI0:BOOLEAN;BEGIN OIOI100IlI0 := INHERITED VALID(COMMAND );IF (COMMAND =CMRELEASEDFOCUS )OR (COMMAND =CMCLOSE
)THEN BEGIN WITH TABLEVIEW^ DO BEGIN IF TABLELINE ^. FIELDSTR <> TABLELINE ^. DATA ^THEN OIOI100IlI0 := NOT ERRORBOX
(WRITEFIELD )ELSE OIOI100IlI0 := TRUE ;IF (OIOI100IlI0 )AND (TABLELINE ^. STATE AND SFSELECTED <> 0 )THEN TABLEVIEW ^.
FOCUS ;IF COMMAND =CMRELEASEDFOCUS THEN LOCKUPDATE ELSE UNLOCKREC END END ;VALID := OIOI100IlI0 END ;END .